With virtual machine technology, a user can create and run multiple operating environments on a server at the same time. Each operating environment, or virtual machine, requires its own “guest” operating system (OS) and can run software applications independently from the other virtual machines. Virtual machine technology provides many benefits as it can lower information technology (IT) costs through increased efficiency, flexibility and responsiveness. Each virtual machine acts as a separate environment that reduces risks and allows developers to quickly recreate different OS configurations or compare versions of applications designed for different OSs. Additional customer uses for VMs include cloud services, targeted production server consolidation, hosting of legacy applications (older versions), and computer or server backup.
Guest programs, as with any user application, may perform one or more system calls of the guest OS kernel as part of its execution. As an example, a guest program may make an I/O system call to access its virtual disk, a system call that ultimately requires physical device access. Consequently, this system call triggers a “VM Exit” event that transfers control from the guest program to the virtual machine monitor, then a switch to the host operating system, and then a switch to a thread that implements an appropriate virtual device (e.g., virtual device emulator). As such, such I/O operations or other system calls by a guest program can be slow and resource-expensive due to the cost of numerous context switches between the various layers in the virtualization stack.